package page

import (
	"fmt"

	appErrors "BookStack/pkg/errors"
)

// ========================== 页面相关错误 ==========================

// PageNotFound 页面不存在错误
func PageNotFound(id interface{}) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodePageNotFound,
		Message: fmt.Sprintf("页面不存在: %v", id),
	}
}

// PageTitleExists 页面标题已存在错误
func PageTitleExists(title string) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodePageTitleExists,
		Message: fmt.Sprintf("页面标题已存在: %s", title),
	}
}

// PageSlugExists 页面Slug已存在错误
func PageSlugExists(slug string) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodePageSlugExists,
		Message: fmt.Sprintf("页面别名已存在: %s", slug),
	}
}

// PageTitleRequired 页面标题必填错误
func PageTitleRequired() error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodePageTitleRequired,
		Message: "页面标题不能为空",
	}
}

// PageSlugRequired 页面Slug必填错误
func PageSlugRequired() error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodePageSlugRequired,
		Message: "页面别名不能为空",
	}
}

// PageContentRequired 页面内容必填错误
func PageContentRequired() error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodePageContentRequired,
		Message: "页面内容不能为空",
	}
}

// PageStatusInvalid 页面状态无效错误
// func PageStatusInvalid(status int) error {
// 	return &appErrors.AppError{
// 		Code:    appErrors.ErrCodePageStatusInvalid,
// 		Message: fmt.Sprintf("无效的页面状态: %d", status),
// 	}
// }

// ========================== 通用错误 ==========================

// DatabaseError 数据库错误
func DatabaseError(err error) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodeDatabase,
		Message: err.Error(),
	}
}

// ValidationError 数据验证错误
func ValidationError(field, message string) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodeValidation,
		Message: fmt.Sprintf("字段 %s: %s", field, message),
	}
}

// InvalidRequestError 无效请求错误
func InvalidRequestError(message string) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodeBadRequest,
		Message: message,
	}
}

// UnauthorizedError 未授权错误
func UnauthorizedError() error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodeUnauthorized,
		Message: "未授权访问",
	}
}

// ForbiddenError 禁止访问错误
func ForbiddenError() error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodeForbidden,
		Message: "无权限执行此操作",
	}
}

// InternalError 内部服务器错误
func InternalError(err error) error {
	return &appErrors.AppError{
		Code:    appErrors.ErrCodeInternal,
		Message: err.Error(),
	}
}

// WrapError 包装错误
func WrapError(err error) error {
	if err == nil {
		return nil
	}

	// 如果已经是AppError类型，直接返回
	if appErr, ok := err.(*appErrors.AppError); ok {
		return appErr
	}

	// 包装为内部错误
	return InternalError(err)
}
